From: Marco Trevisan (Treviño) Date: Mon, 17 Apr 2023 17:53:34 +0000 (+0200) Subject: dash: Do not destroy a dash label twice X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~371^2^2~31 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=8bf06bfc9f87c665959e1ff3240f227e5cf224df;p=gnome-shell.git dash: Do not destroy a dash label twice Dash labels are children of the main uiGroup and so could be destroyed before their logical-owner DashItemContainer during shutdown. This implies that we could destroy them twice. To avoid this, unset them when destroyed. This is mostly visible when using dash-to-dock, but it's still technically possible with upstream code: ** Message: 19:57:49.847: Shutting down GNOME Shell (gnome-shell:2788214): Gjs-CRITICAL **: 19:57:49.933: Object St.Label (0x55b33668eab0), has been already disposed — impossible to access it. This might be caused by the object having been destroyed from C code using something such as destroy(), dispose(), or remove() vfuncs. == Stack trace for context 0x55b3345fd3d0 == #0 7ffeabd810d0 b /data/GNOME/gnome-shell/js/ui/dash.js:86 #1 55b335b62f88 i /data/GNOME/JHBUILD_HOME/.local/share/gnome-shell/extensions/dash-to-dock@micxgx.gmail.com/docking.js:487 #2 7ffeabd838f0 b self-hosted:1121 #3 55b335b62ec8 i /data/GNOME/gnome-shell/js/ui/layout.js:240 Part-of: --- diff --git a/js/ui/dash.js b/js/ui/dash.js index 212592bdf..188308853 100644 --- a/js/ui/dash.js +++ b/js/ui/dash.js @@ -71,6 +71,7 @@ class DashItemContainer extends St.Widget { this.label = new St.Label({ style_class: 'dash-label' }); this.label.hide(); Main.layoutManager.addChrome(this.label); + this.label.connectObject('destroy', () => (this.label = null), this); this.label_actor = this.label; this.child = null; @@ -82,7 +83,7 @@ class DashItemContainer extends St.Widget { this.connect('destroy', () => { if (this.child != null) this.child.destroy(); - this.label.destroy(); + this.label?.destroy(); }); }